// 版权所有2009 Go作者。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 包syscall包含到低级操作系统的接口
// 原语。详细信息因基础系统而异，默认情况下，godoc将显示当前
// 系统的syscall文档。如果希望godoc显示另一个
// 系统的syscall文档，请将$GOOS和$GOARCH设置为所需的系统。例如，如果您想在linux/amd64上查看freebsd/arm的文档，请将$GOOS 
// 设置为freebsd，将$GOARCH设置为arm。
// syscall的主要用途是在其他软件包中使用，这些软件包为系统提供了更为方便的接口，如“os”、“time”和“net”。如果可以的话，使用那些包而不是这个包。
// 有关此软件包中的函数和数据类型的详细信息，请参阅相应操作系统的手册。
// 这些调用返回err==nil表示成功；否则
// err是描述故障的操作系统错误。
// 在大多数系统上，该错误的类型为syscall.Errno。
// 
// 已弃用：此包已锁定。调用方应使用golang.org/x/sys存储库中的
// 对应包。
// 这也是应用新系统或版本
// 所需更新的地方。看见https:
// 信息。
// 
package syscall

// go:generate go run./mksyscall\u windows.go-systemdll-output zsyscall\u windows.go syscall\u windows.go security\u windows.go 

// StringByteSlice将字符串转换为以NUL结尾的[]字节，
// 如果s包含一个NUL字节，则此函数将崩溃，而不是返回错误。
// 
// 已弃用：请改用ByteSliceFromString。
func StringByteSlice(s string) []byte {
	a, err := ByteSliceFromString(s)
	if err != nil {
		panic("syscall: string with NUL passed to StringByteSlice")
	}
	return a
}

// ByteSliceFromString返回以NUL结尾的字节片
// 包含s的文本。如果s在任何
// 位置包含NUL字节，则返回（nil，EINVAL）。
func ByteSliceFromString(s string) ([]byte, error) {
	for i := 0; i < len(s); i++ {
		if s[i] == 0 {
			return nil, EINVAL
		}
	}
	a := make([]byte, len(s)+1)
	copy(a, s)
	return a, nil
}

// StringBytePtr返回指向以NUL结尾的字节数组的指针。
// 如果s包含一个NUL字节，则此函数将中断，而不是返回
// 一个错误。
// 
// 已弃用：请改用ByteptFromString。
func StringBytePtr(s string) *byte { return &StringByteSlice(s)[0] }

// BytePtrFromString返回一个指针，指向包含s文本的以NUL结尾的
// 字节数组。如果s在任何
// 位置包含NUL字节，则返回（nil，EINVAL）。
func BytePtrFromString(s string) (*byte, error) {
	a, err := ByteSliceFromString(s)
	if err != nil {
		return nil, err
	}
	return &a[0], nil
}

// 当我们需要一个指向0字节的有效指针时，使用单字零。
// 参见mksyscall.pl。
var _zero uintptr

// Unix返回存储在ts中的时间，单位为秒加纳秒。
func (ts *Timespec) Unix() (sec int64, nsec int64) {
	return int64(ts.Sec), int64(ts.Nsec)
}

// Unix返回存储在电视中的时间，单位为秒加纳秒。
func (tv *Timeval) Unix() (sec int64, nsec int64) {
	return int64(tv.Sec), int64(tv.Usec) * 1000
}

// Nano返回存储在ts中的时间，单位为纳秒。
func (ts *Timespec) Nano() int64 {
	return int64(ts.Sec)*1e9 + int64(ts.Nsec)
}

// Nano以纳秒的形式返回存储在电视中的时间。
func (tv *Timeval) Nano() int64 {
	return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
}

// Getpagesize和Exit由运行时提供。

func Getpagesize() int
func Exit(code int)
